package com.eqxiu.ieditor.api.order;

import com.eqxiu.ieditor.dto.OrderDTO;

import java.util.List;
import java.util.Map;

/**
 * 
 * @description 订单的接口类
 * @author ranger
 * @update lifen
 * @date May 26, 2017
 */
public interface IOrderServiceApi {

	/**
	 * 
	 * @description 加密前端给的参数，用于防止暴露paykey
	 * @author ranger
	 * @date Sep 20, 2016
	 * @modified by xxx 修改说明
	 * @param param
	 * @return
	 */
	 String signParam(Map<String, Object> param, String appKey);

	/**
	 * 
	 * @description 创建订单
	 * @author ranger
	 * @date May 27, 2017
	 * @modified by xxx 修改说明
	 * @param order
	 */
	OrderDTO createOrder(OrderDTO order);

	/**
	 * 
	 * @description 根据主键查询订单
	 * @author ranger
	 * @date Oct 27, 2016
	 * @modified by xxx 修改说明
	 * @param id
	 * @return
	 */
	OrderDTO selectByPrimaryKey(Long id);

	/**
	 * 
	 * @description 查询订单
	 * @author ranger
	 * @date Sep 23, 2016
	 * @modified by xxx 修改说明
	 * @return
	 */
	List<OrderDTO> selectByOrderId(Long orderId, String userId);

	/**
	 *
	 * @description 根据code查询订单
	 * @author lifen
	 * @date 2019年4月3日
	 * @modified
	 * @return
	 */
	List<OrderDTO> selectByCode(String code, String userId);

	/**
	 * 
	 * @description 根据支付平台id查找订单，唯一一条记录
	 * @author ranger
	 * @date Sep 20, 2016
	 * @modified by xxx 修改说明
	 * @param orderSn
	 * @return
	 */
	OrderDTO findOrder(String orderSn);

	/**
	 * 
	 * @description 更新订单状态为完成
	 * @author ranger
	 * @date May 27, 2017
	 * @modified by xxx 修改说明
	 * @return
	 */
	 int finishOrder(OrderDTO dto);

	/**
	 *
	 * @description
	 * @author lifen
	 * @date 2019年4月3日
	 * @modified
	 * @return
	 */
	List<OrderDTO> selectByIdAndPayType(Long id, String userId);

	/**
	 *
	 * @description
	 * @author lifen
	 * @date 2019年4月3日
	 * @modified
	 * @return
	 */
	List<OrderDTO> selectByIdAndUserId(Long id, String userId);
	/**
	 *
	 * @description
	 * @author lifen
	 * @date 2019年4月3日
	 * @modified
	 * @return
	 */
	List<OrderDTO> selectByIdAndCode(Long id,String userId,String code,Long prodId);

	/**
	 *
	 * @description 根据orderDto中的字段来查询对应的信息
	 * @author lifen
	 * @date 2019年4月3日
	 * @modified
	 * @return
	 */
	List<OrderDTO> findByCondition(OrderDTO orderDTO);

	/**
	 *
	 * @description //根据id查找订单
	 * @author jijun
	 * @date Sep 20, 2016
	 * @modified
	 * @param id
	 * @return Order
	 */
	public OrderDTO findOrder(Long id);

	/**
	 *
	 * @description 根据订单id删除订单
	 * @author jijun
	 * @date Sep 22, 2016
	 * @modified
	 * @param id
	 * @return int
	 */
	int deleteByID(Long id);

	/**
	 *
	 * @description 更新指定订单（覆盖所有属性）
	 * @author jijun
	 * @date Sep 22, 2016
	 * @modified
	 * @param record
	 * @return int
	 */
	int updateByID(OrderDTO record);

	/**
	 *
	 * @description //根据参数查找订单
	 * @author jijun
	 * @date Sep 20, 2016
	 * @modified
	 * @param params
	 * @return List<Order>
	 */
	public Map<String, Object> findByParams(Map<String, String> params);

	public List<OrderDTO> findByTime(String startTime, String endTime);

	/**
	 *
	 * @description //TODO 设计说明
	 * @author ranger
	 * @date Jul 25, 2017
	 * @modified by xxx 修改说明
	 * @param params
	 * @return
	 */
	public Map<String, Object> findNumberByParams(Map<String, String> params);
}
